import pygame
import conweys
from cell import *

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

cells = []

SIZE = 10

def main():
    global cells, SIZE
    
    pygame.init
        
    filas = int(raw_input('Ingrese filas: '))
    columnas = int(raw_input('Ingrese columnas: '))
    
    screen = pygame.display.set_mode((columnas*SIZE, filas*SIZE))
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((0,0,200))
    background_rect = background.get_rect()
    
    # Matrix para hacer los calculos del automata celular
    #matrix = conweys.initial_matrix(filas, columnas)
    
    if raw_input('Desea llenar la matrix random? (s/n) ')[0] == 's':
        matrix = conweys.fill_random(filas, columnas)
    if raw_input('Desea llenar la matrix random desde un archivo? (s/n) ')[0] == 's':
        matrix = conweys.read_from_file(filas, columnas)
    else:
        matrix = conweys.initial_matrix(filas, columnas)
    print matrix
    
    # Matriz para guardar las celdas
    cells_matrix = []
    for i in range( 0, filas*SIZE, SIZE) :
        fila= []
        for j in range( 0, columnas*SIZE, SIZE):
            
            aux =Cell( pos=(j,i) )
            aux.set_color(matrix.get_value(i/SIZE,j/SIZE))
            #if matrix.alive(i/SIZE,j/SIZE):
                #print 'Vivo (%s,%s)\n Color: %s'%(i,j,aux.color)
            fila.append(aux)
            cells.append(aux)
        cells_matrix.append(fila)
    
    grupo_cells = pygame.sprite.Group( cells )
    # Dibujo el fondo
    screen.blit(background, (0,0))
            
    # Dibujo a los agentes en mi screen
    grupo_cells.draw(screen)
    
    # Muestro screen actualizado
    pygame.display.flip()
    raw_input('Apriete')
    clock = pygame.time.Clock()
    fps = 30
    
    
    end = False
    count = 0
    while (not end):
        # Mantengo la actualizacion grafica a la velocidad deseada
        clock.tick(fps)
        
        conweys.update_pressure(matrix)
        
        for i in range(1, filas+1):
            for j in range(1, columnas+1):
                
                (cells_matrix[i-1][j-1]).set_color(matrix.get_value(i,j))
        
        # Dibujo el fondo
        screen.blit(background, (0,0))
            
        # Dibujo a los agentes en mi screen
        grupo_cells.draw(screen)
    
        # Muestro screen actualizado
        pygame.display.flip()
        count += 1
        
        if count == 100:
            count = 0 
            end = raw_input('Salir? (s/n) ')[0] == 's'
    

    
if __name__ == "__main__":
    main()

    
